#ifndef IMAGINE_H
#define IMAGINE_H

#include "imInterfaces.h"
#include "imMaths.h"
#include "imGeometry.h"
#include "imGraphics.h"
#include "imInput.h"

//
// Static movement
// For objects that will never move
class StaticMovementCmp : public iMovementComponent {
protected:
	Vector3 m_Pos, m_Scale;
	Quaternion m_Orientation;
	Matrix m_World;
public:
	void SetPos(const Vector3 &Pos) { m_Pos = Pos; }
	void SetScale(const Vector3 &Scale) { m_Scale = Scale; }
	void SetOrientation(const Quaternion &Orientation) { m_Orientation = Orientation; }

	Vector3 *GetPos() { return &m_Pos; }
	Vector3 *GetScale() { return &m_Scale; }
	Quaternion *GetOrientation() { return &m_Orientation; }
	Matrix GetWorld() { return Matrix::World(m_Pos, m_Orientation); }

	void Update() { return; }
};

//
// Graphics component
class GraphicsComponent : public iComponent {
protected:
	pMesh m_Mesh;
	pMaterial m_Material;
public:
	GraphicsComponent();
	void SetMesh(Mesh* NewMesh);
	void SetMaterial(Material *NewMaterial);
	void Update();
};

#endif